package com.woniu.teachmall.config;

import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Minio配置类
 * 该类负责配置MinioClient并确保指定的桶（bucket）存在，如果不存在则创建一个新的桶
 */
@Configuration
public class MinioConfig {

    // 从配置文件中读取Minio服务的相关信息
    @Value("${minio.endpoint}")
    private String endpoint;  // Minio的服务端点

    @Value("${minio.accessKey}")
    private String accessKey;  // 用于身份验证的Access Key

    @Value("${minio.secretKey}")
    private String secretKey;  // 用于身份验证的Secret Key

    @Value("${minio.bucketName}")
    private String bucketName;  // 存储桶的名称

    /**
     * 创建并配置MinioClient实例
     * @return 配置好的MinioClient实例
     * @throws Exception 如果发生任何异常，则抛出
     */
    @Bean
    public MinioClient minioClient() throws Exception {
        // 使用构建器创建MinioClient实例，并配置endpoint和凭证
        MinioClient minioClient = MinioClient.builder()
                .endpoint(endpoint)  // 设置Minio服务的endpoint
                .credentials(accessKey, secretKey)  // 设置Access Key和Secret Key进行身份验证
                .build();

        // 检查指定的bucket是否存在
        boolean found = minioClient.bucketExists(BucketExistsArgs.builder()
                .bucket(bucketName)  // 设置要检查的bucket名称
                .build());

        // 如果bucket不存在，则创建新的bucket
        if (!found) {
            minioClient.makeBucket(MakeBucketArgs.builder()
                    .bucket(bucketName)  // 设置要创建的bucket名称
                    .build());
        }

        // 返回配置好的MinioClient实例
        return minioClient;
    }

    /**
     * 获取Minio桶的名称
     * @return 返回存储桶的名称
     */
    public String getBucketName() {
        return bucketName;
    }
}
